fn takes_own(some_str: String) {
    println!("{some_str}");
}

fn makes_copy(i: i32) {
    println!("i = {i}");
}

fn main() {
    let s = String::from("hello");
    takes_own(s);
    /**
    解释一下println!("{s}");为什么会报错
    s 在takes_own方法的作用域中有效
    当s离开了takes_own方法的作用域，这时的内存也就被回收掉了
    s被释放掉了此时再重新调用s时，堆上的内存已经不存在了
    */
    // println!("{s}");

    let x = 5;
    makes_copy(x);
    println!("Hello, world! {x}"); //这里x为什么能使用呢，这是应为x是个整形，内存在栈上，自动实现了copy的trait
}
